]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
ShellDBus: export screensaver interface
authorGiovanni Campagna <gcampagna@src.gnome.org>
Sat, 2 Jun 2012 23:20:31 +0000 (01:20 +0200)
committerGiovanni Campagna <gcampagna@src.gnome.org>
Sat, 21 Jul 2012 13:40:29 +0000 (15:40 +0200)
gnome-session and gnome-settings-daemon rely on the screensaver
interface to know the locked state. Since gnome-screensaver is no
longer running, it's up to gnome-shell to provide it.

https://bugzilla.gnome.org/show_bug.cgi?id=619955

js/ui/main.js
js/ui/shellDBus.js
src/main.c

index 2dc152f6327002e262b176e8239be6dcf1ddc74a..790dd808f6fba958b9a1bce2b47959ad8994693d 100644 (file)
@@ -65,6 +65,7 @@ let recorder = null;
 let sessionMode = null;
 let shellDBusService = null;
 let shellMountOpDBusService = null;
+let screenSaverDBus = null;
 let modalCount = 0;
 let modalActorFocusStack = [];
 let uiGroup = null;
@@ -215,6 +216,7 @@ function start() {
     magnifier = new Magnifier.Magnifier();
     statusIconDispatcher = new StatusIconDispatcher.StatusIconDispatcher();
     screenShield = new ScreenShield.ScreenShield();
+    screenSaverDBus = new ShellDBus.ScreenSaverDBus();
     panel = new Panel.Panel();
     wm = new WindowManager.WindowManager();
     messageTray = new MessageTray.MessageTray();
index 661818ed83386175be8f26443a35b5cbff3b8027..53a6523c2014530c375e553be3f7ae1814044746 100644 (file)
@@ -50,6 +50,20 @@ const GnomeShellIface = <interface name="org.gnome.Shell">
 <property name="ShellVersion" type="s" access="read" />
 </interface>;
 
+const ScreenSaverIface = <interface name="org.gnome.ScreenSaver">
+<method name="Lock">
+</method>
+<method name="GetActive">
+    <arg name="active" direction="out" type="b" />
+</method>
+<method name="SetActive">
+    <arg name="value" direction="in" type="u" />
+</method>
+<signal name="ActiveChanged">
+    <arg name="new_value" type="b" />
+</signal>
+</interface>;
+
 const GnomeShell = new Lang.Class({
     Name: 'GnomeShellDBus',
 
@@ -319,3 +333,33 @@ const GnomeShellExtensions = new Lang.Class({
                                    GLib.Variant.new('(sis)', [newState.uuid, newState.state, newState.error]));
     }
 });
+
+const ScreenSaverDBus = new Lang.Class({
+    Name: 'ScreenSaverDBus',
+
+    _init: function() {
+        this.parent();
+
+        Main.screenShield.connect('lock-status-changed', Lang.bind(this, function(shield, locked) {
+            this._dbusImpl.emit_signal('ActiveChanged', GLib.Variant.new('(b)', [locked]));
+        }));
+
+        this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(ScreenSaverIface, this);
+        this._dbusImpl.export(Gio.DBus.session, '/org/gnome/ScreenSaver');
+    },
+
+    Lock: function() {
+        Main.screenShield.lock(true);
+    },
+
+    SetActive: function(active) {
+        if (active)
+            Main.screenShield.lock(true);
+        else
+            Main.screenShield.unlock();
+    },
+
+    GetActive: function() {
+        return Main.screenShield.locked;
+    }
+});
index ad4fb3ac59a8745021e08cfc803e44b4826faf26..c4d2d28c3e45dbcc60a970796f44f65efa8b3997 100644 (file)
@@ -34,6 +34,7 @@ extern GType gnome_shell_plugin_get_type (void);
 
 #define SHELL_DBUS_SERVICE "org.gnome.Shell"
 #define MAGNIFIER_DBUS_SERVICE "org.gnome.Magnifier"
+#define SCREENSAVER_DBUS_SERVICE "org.gnome.ScreenSaver"
 
 #define OVERRIDES_SCHEMA "org.gnome.shell.overrides"
 
@@ -152,6 +153,8 @@ shell_dbus_init (gboolean replace)
                             MAGNIFIER_DBUS_SERVICE, FALSE,
   /* ...and the org.freedesktop.Notifications service. */
                             "org.freedesktop.Notifications", FALSE,
+  /* ...and the org.gnome.ScreenSaver service. */
+                            SCREENSAVER_DBUS_SERVICE, FALSE,
                             NULL);
   /* ...and the on-screen keyboard service */
   shell_dbus_acquire_name (bus,